package site.fsyj.service;

import lombok.extern.slf4j.Slf4j;
import site.fsyj.bean.AutoMihayou;
import site.fsyj.config.GenshinHelperProperties;
import site.fsyj.sign.DailyTask;
import site.fsyj.util.ApplicationContextUtil;
import site.fsyj.util.TrayUtil;

import java.util.Map;

/**
 * @author fsyj on 2022/3/7
 */
@Slf4j
public class MiHuYouTask {

    // TODO 解决自动注入失败的问题
    /**
     * 自动任务
     */
    AutoMihayou autoMihayou;

    /**
     * 米忽悠定时签到任务 执行部分
     */
    public void runTask() {

        autoMihayou = ApplicationContextUtil.CONTEXT.getBean(AutoMihayou.class);

        // 先判断cookie字段是否已经获取，若没获取则条状到获取函数
        if (!isConfig()) {
            configCookies();
        }
        // 再次检查，如果还是没有则说明系统出现严重错误
        if (!isConfig()) {
            log.error("获取cookie失败，系统出现严重错误");
            System.exit(-1);
        }

        // 最大重连次数
        int reconnect = 2;

        GenshinHelperProperties.Account account = new GenshinHelperProperties.Account();
        account.setCookie(autoMihayou.getCookie());
        // 从cookie的account_id字段中获取
        account.setStuid(autoMihayou.getSuid());
        account.setStoken(autoMihayou.getToken());

        DailyTask dailyTask = new DailyTask(account);
        StringBuilder msg = new StringBuilder();
        String result = "";
        for (int i = 0; i < reconnect; i++) {
            Map<String, Object> mapRun = dailyTask.doDailyTask();
            if (!(boolean) mapRun.get("flag")) {
                if (i != reconnect - 1) {
                    msg.append(mapRun.get("msg"));
                    msg.append("\n").append("用户登录失败！，尝试第").append(i + 1).append("次重试");
                    continue;
                }
                log.error("重连超时，系统出错");
                break;
            } else {
                //任务成功完成
                msg.append("\n").append(mapRun.get("msg")).append("\n-----------------\n").append("[SUCCESS] 任务全部正常完成，进程退出");
                result = "[SUCCESS] 任务全部正常完成";
                break;
            }
        }
        TrayUtil.displayTray("执行结果通知",result);
    }

    private void configCookies() {
        // TODO 配置cookie
    }

    private boolean isConfig() {
        return !"".equals(autoMihayou.getCookie())  && !"".equals(autoMihayou.getSuid())
                && !"".equals(autoMihayou.getToken());
    }
}
